home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 6 / 01 / mini-compiler / asm / open.lib < prev    next >
Encoding:
Text File  |  1995-06-01  |  2.4 KB  |  85 lines

  1.        Idnt    _Open
  2.        Section _Fopen,Code
  3.        Xref    Dosbase
  4.        Xref    IoResult
  5.        Xref    IoCheck
  6.        Xref    Error
  7.        Xdef    FOpen
  8.        Xdef    FileTab
  9.  
  10.    ; --------------------------------
  11.    ; - FOpen : Ein File mit Namen und Modus öffnen
  12.    ; -
  13.    ; - Stand : 07-Aug-93
  14.    ; -
  15.    ; -         RTS.l String(256) 0.w [Adresse Filevar]
  16.    ; -         D2 = Modus
  17.    ; -       
  18.    ; - Die Null steht da, um 255-Byte lange Strings mit einem 0
  19.    ; - beenden zu können.
  20.  
  21. FOpen move.l      (a7)+,a4   ; Rts - Adresse abheben
  22.       Clr.l   IoResult   ; Ergebnis = Ok
  23.       Moveq       #0,d4             ; Zähler
  24.       move.b      (a7),d4      ; Länge des Strings
  25.       addq.l      #1,d4      ; +1 (Längenbyte am Anfang )
  26.       clr.b       (a7,d4)      ; Nullbyte ans Ende des Strings setzen
  27.       lea         1(a7),a1
  28.       move.l      a1,d1             ; Adresse String auf Stack
  29.       move.l      Dosbase,a6
  30.       jsr         -30(a6)
  31.       adda.l      #258,a7      ; 256 Byte String + 2 Byte (0.w)
  32.       Move.l      (sp)+,a0   ; Adresse Filevar
  33.       Move.l      d0,(a0)      ; Ergebnis in die Var
  34.       tst.l      d0      ; D0 = 0 --> Fehler beim Öffnen
  35.       beq.s      FOfehler   ; Fehler !
  36.  
  37.   ; ---------------------------
  38.   ; In die Tabelle eintragen
  39.  
  40.       Moveq     #0,d2      ; Zähler max. Felder (Index)
  41.       Lea       FileTab,A1   ; Adresse 1. Feld
  42. Tstl  Tst.l     (a1,d2)      ; Teste ob Filehandle Platz hat
  43.       beq.s   Save      ; Platz frei, speichern
  44.       addq.l   #4,d2      ; nächstes Feld
  45.       Cmp.w     #128,d2      ; Tabelle durchsucht ?
  46.       Beq.s     FTErr      ; Ja, Kein Platz mehr
  47.       bra.s     Tstl
  48. Save  Move.l    d0,(a1,d2)
  49.  
  50.       clr.l      IoResult   ; Kein Fehler, IOResult=0
  51. FOrts jmp    (a4)
  52.    
  53.    ; Nun ist ein Fehler aufgetreten , also
  54.    ; Fehlernummer ermitteln und abspeichern
  55. FOfehler
  56.        Jsr     -132(a6)          ; IOErr
  57.        move.l  d0,IoResult
  58.        tst.l   IoCheck      ; IO-Behandlung im Compiler ?
  59.        beq     FOrts      ; Ja
  60.        Move.l  a4,-(sp)      ; Nein, Adresse des Fehlers ablegen
  61.        Jmp     Error
  62.  
  63.    ; Fehler: Tabelle ist voll
  64. FTErr  Moveq   #4,d0   
  65.        Move.l  a4,-(sp)
  66.        Jmp     Error
  67.    ; ---------------------------
  68.    ; Tabelle für max. 30 Filedescriptoren
  69.    ; Tabellenfeld = 0 --> noch leer
  70.  
  71. FileTab      dc.l 0,0,0,0,0,0
  72.        dc.l 0,0,0,0,0,0
  73.       dc.l 0,0,0,0,0,0
  74.       dc.l 0,0,0,0,0,0
  75.       dc.l 0,0,0,0,0,0
  76.       dc.l 0,0         ; Abbruch forcieren
  77.  
  78.  
  79.  
  80.  
  81.  
  82.        End
  83.  
  84.  
  85.